package dados;

import java.io.Serializable;

import sistema.Verificador;



/**
 * Uma forma de contactar um Contato
 *
 */
public class FormaDeContato implements Serializable {
	private static final long serialVersionUID = 1L;
	private String endereco,comentario;
	private TipoDeFormaDeContato tipo;
	/**	
	 *Enumeracao com os tipos de forma de contato
	 */
	public enum TipoDeFormaDeContato {
		TELEFONE,SKYPE,ORKUT,FACEBOOK,EMAIL,MSN,TWITTER,GMAIS
	}
	/**
	 * Construtor Com o Nome da Forma de contato e seu endereco
	 * @param tipo - O tipo da forma de contato ex: Facebook,Orkut,Skype
	 * @param endereco - O endereco da forma de contato ex: exemplo@host.dominio
	 * @throws Exception 
	 */
	public FormaDeContato(TipoDeFormaDeContato tipo, String endereco) throws Exception {
		this.tipo = tipo;
		if (tipo == TipoDeFormaDeContato.TELEFONE){
			if (!Verificador.ehTelefoneValido(endereco)){
				throw new Exception("Telefone Invalido\nFormato: (83)1234-5678.");
			}
		}
		else if(tipo == TipoDeFormaDeContato.TWITTER || tipo == TipoDeFormaDeContato.SKYPE){}
		else if(!Verificador.ehEmailValido(endereco)){
			throw new Exception("Endereco Invalido\nFormato: exemplo@host.dominio .");
		}
		this.endereco = endereco;
	}
	/**
	 * Construtor Com o Nome da Forma de contato e seu endereco e um comentario
	 * @param tipo - O tipo da forma de contato ex: Facebook,Orkut,Skype
	 * @param endereco O edereco da forma de contato ex: exemplo@host.dominio
	 * @param comentario Comentario sobre a forma de contato ex: um email do gmail.
	 */
	public FormaDeContato(TipoDeFormaDeContato tipo, String endereco, String comentario)throws Exception {
		this(tipo,endereco);
		this.comentario = comentario;
	}
	/**
	 * O tipo da forma de contato
	 * @return um TipoDeFormaDeContato
	 */
	public TipoDeFormaDeContato getTipo() {
		return tipo;
	}
	/**
	 * Modifica o endereco da forma de contato.
	 * @param endereco o novo endereco.
	 */
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	/**
	 * Modifica o commentario sobre a forma de contato.
	 * @param comentario O novo comentario
	 */
	public void setComentario(String comentario) {
		this.comentario = comentario;
	}
	
	/**
	 * Retorna o comentario da Forma de contato.
	 * @return Comentario
	 */
	public String getComentario(){
		return comentario;
	}
	/**
	 * Retorna o endredeco da forma de contado
	 * @return o endereco da forma de contato
	 */
	public String getEndereco() {
		return endereco;
	}
	/**
	 * Representacao em String de uma FormaDeContato
	 */
	@Override
	public String toString() {
		return getTipo() + ": "+ getEndereco();
	}
	
	

}
